漏洞具有哪些特性
漏洞具有以下特性:
持久性:一个软件系统从发布之日起,随着用户广泛且深入地使用,软件系统中存在的漏洞会不断暴露出来,这些被发现的漏洞也会不断地被软件开发商发布的补丁软件修补,或在以后发布的新版软件中得以纠正。而在新版软件纠正旧版本中的漏洞的同时,也会引入一些新的漏洞和问题。软件开发商和软件使用者的疏忽或错误(如对软件系统不安全的配置或者没有及时更新安全补丁等),也会导致软件漏洞长期存在。随着时间的推移,旧的漏洞会不断消失,新的漏洞会不断出现,因此漏洞具有持久性。相关数据表明高危漏洞及其变种会可预见地重复出现,对内部和外部网络构成持续的威胁。
时效性:漏洞具有时效性,超过一定的时间限制(例如,当针对该漏洞的修补措施出现时,或者软件开发商推出了更新版本系统时),漏洞的威胁就会逐渐减少直至消失。漏洞的时效性具有双刃剑的作用,一方面,漏洞信息的公开加速了软件开发商的安全补丁的更新进程,能够尽快警示软件用户,减少了恶意程序的危害程度;另一方面,攻击者也可能会尽快利用漏洞信息实施攻击行为。
广泛性:漏洞具有广泛性,会影响到很大范围的软件和硬件设备,包括操作系统本身及系统服务软件、网络客户和服务器软件、网络路由器和防火墙等。理论上讲,所有信息系统或设备中都会存在设计、实现或者配置上的漏洞。
具体性:漏洞又具有具体性,即它总是存在于具体的环境或条件中。对组成信息系统的软硬件设备而言,在这些不同的软硬件设备中都可能存在不同的安全漏洞,甚至在不同种类的软硬件设备中,同种设备的不同版本之间,由不同设备构成的信息系统之间,以及同种软件系统在不同的配置条件下,都会存在各自不同的安全漏洞。
可用性:漏洞具有可利用性,漏洞一旦被攻击者利用就会给信息系统带来威胁和损失。当然,软件厂商也可以通过各种技术手段来降低漏洞的可利用性,例如微软公司通过在Windows操作系统或应用软件中增加内存保护机制(如DEP、ASLR和SafeSEH等),极大地降低了缓冲区溢出等漏洞的可利用性,本书将在第3章介绍这些保护机制。
隐蔽性:漏洞具有隐蔽性,往往需要通过特殊的漏洞分析手段才能发现。尽管随着程序分析技术的进步,已有工具可以对程序源代码进行静态分析和检查,以发现其中的代码缺陷(如strcpy等危险函数的使用),但是对于不具备明确特征的漏洞而言,需要组合使用静态分析和动态分析工具、人工分析等方法去发现。本书的后面部分会着重讲述这些漏洞分析技术。